// 与1104案例一样，不过该案例中将gethostbyname获得的域名对应的数据都放入了hptr所指向的结构体之后，
// 分别将该结构体的h_name和h_aliases分量也输出，由于h_aliases的分量可能不止一个，所以使用了for循环
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <netdb.h>
int main(int argc, char *argv[]){
	
	struct hostent *hptr;

	char *ptr,**pptr;

	struct in_addr hpaddr;

	// 使用argv[1]作为参数
	ptr = argv[1];

	if( (hptr = gethostbyname(ptr)) == NULL){
		printf("域名解析失败!\n");
		return -2;
	}

	// 打印域名
	printf("目标的官方域名是%s\n", hptr->h_name);

	// 打印别名,由于可能存在多个别名，所以全部打印
	for(pptr = hptr->h_aliases; *pptr != NULL; pptr++){
		printf("目标的别名是%s\n",*pptr);
	}

	// 根据地址类型输出地址
	switch(hptr->h_addrtype){
		// 针对IPV4和IPV6均进行如下操作
		case AF_INET:
		case AF_INET6:
		{
			// 目标可能由多个地址
			pptr = hptr->h_addr_list;
			for( ;*pptr != NULL; pptr++){
				memcpy(&hpaddr,pptr,4);
				printf("目标的地址为：%s\n",inet_ntoa(hpaddr));
			}
		}
		break;
		defaule:
			printf("未知的地址类型\n");
	}

	return 0;
	
}
